using System;
using System.Diagnostics.Contracts;

namespace Boggle.Net.Model
{
    [ContractClass(typeof(CodeContractForISolver))]
    public interface ISolver
    {
        IObservable<AcceptablePlay> FindAllWordsIn(Tray tray);
    }

    [ContractClassFor(typeof(ISolver))]
    internal abstract class CodeContractForISolver : ISolver
    {
        public IObservable<AcceptablePlay> FindAllWordsIn(Tray tray)
        {
            Contract.Requires<ArgumentNullException>(tray != null);
            return default(IObservable<AcceptablePlay>);
        }
    }
}